import base64
import pickle
from django_redis import get_redis_connection


def merge_cookie_to_reids(request, response, user):
    """
    在用户登陆之后 合并 cookie 和redis中的内容
    :return:
    """

    # 获取cookie中的数据
    cart_str = request.COOKIES.get('cart')

    # 如果cookie中有数据
    if cart_str:
        # cookie 中的数据解码
        cart_cookie = pickle.loads(base64.b64decode(cart_str))

        # 获取redis中的数据
        # 建立redis连接
        redis_conn = get_redis_connection('cart')
        # 获取redis中的商品id和count 数据 {sku_id:count}
        cart_redis = redis_conn.hgetall('cart_%s' % user.id)

        # 定义存放数据结果集--> {sku_id:count,sku_id:count}
        cart = {}
        # 封装reids中的数据类型
        for sku_id, count in cart_redis.items():
            cart[int(sku_id)] = int(count)

        # 定义存放选中的商品id列表
        select_sku_id = []
        # 遍历cookie中的数据 {sku_id:{count:1,selected:true},sku_id:{count:2,selected:false}}
        for sku_id, cart_dict in cart_cookie.items():
            # 将cookie中的数据 放在结果集中
            cart[sku_id] = cart_dict['count']

            # 如果是选中的 就存放在列表中
            if cart_dict['selected']:
                select_sku_id.append(sku_id)

        # 保存redis中的数据
        redis_conn.hmset('cart_%s' % user.id, cart)
        redis_conn.sadd('cart_selected_%s' % user.id, *select_sku_id)

        # 删除cookie中的数据
        response.delete_cookie('cart')

        return response
    else:
        # 如果cookie没有数据 直接返回
        return response
